﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
 * 构造方法
 * 
 * 1 在对象被new创建出来的时候进行调用，如果用户不提供，系统就会为用户生产默认构造方法，否则，调用用户自己的构造方法;
 * 
 * 2 自定义构造方法规则：
 * 
 *      2.1 构造方法名称与类名相同，大小写也相同
 *      
 *      2.2 构造方法没有返回值，void也不能写
 *      
 *      2.3 构造方法当中不可以进行return操作
 * 
 * 3 构造方法特点：
 *      3.1 构造方法不能够手动调用，只能创建对象的时候由系统自动调用
 *      
 *      3.2 构造方法每次生成一个对象的时候都会被调用一次
 */

namespace 类与对象_构造方法
{
    class Student
    {
        public string name = "";
        public int age = 0;

        //方法的重载
        public Student()
        {
            Console.WriteLine("无参构造方法");
        }

        public Student(string name)
        {
            Console.WriteLine("单参构造方法");
            this.name = name;
            age = 0;
        }

        public Student(string name,int age) 
        {
            Console.WriteLine("有参构造方法");
            this.name = name;
            this.age = age;
        }

        public void introduce()
        {
            Console.WriteLine(name);
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            //问题：用户自定义带参数构造方法后，为什么不能够无参构造了呢？
            //答案：系统识别用户自定义构造方法后，就不会为用户再生成默认构造方法了

            Student s = new Student("小智" , 20);

            Student s1 = new Student();

            Student s2 = new Student("小智");

            Console.Read();
        }
    }
}
